// 用于封装逻辑，提供响应式数据

import { onUnmounted, ref } from 'vue'
import { useIntersectionObserver, useIntervalFn } from '@vueuse/core'
import dayjs from 'dayjs'

/**
 * 数据懒加载 当没有到达可视的部分，不需要加载数据，反之则加载
 * @param {function} apiFn
 * @returns
 */
export const useLazyData = apiFn => {
  // 需要的东西
  // 1.被观察的对象
  // 2.不同的API函数
  const target = ref(null)
  const result = ref([])

  // stop => 是停止观察是否进入或出去可视区域的行为
  // target => 是观察的目标dom容器，必须是dom容器，而且是vue3.0绑定的dom容器
  // isIntersecting => 是否进入可视区域，true为进入，false为没有进入
  // observerElement => 被观察的dom元素
  const { stop } = useIntersectionObserver(
    target,
    ([{ isIntersecting }], observerElement) => {
      // 此处可根据isIntersecting来判断，做业务逻辑
      if (isIntersecting) {
        stop()
        // 调用api获取接口数据
        apiFn().then(data => {
          result.value = data.result
        })
      }
    }, {
      // 使容器与视图交界区为0的时候，加载数据
      threshold: 0
    }
  )

  return {
    target,
    result
  }
}

// 支付倒计时
export const usePayTime = () => {
  // 倒计时逻辑
  const time = ref(0)
  const timeText = ref('')
  const { pause, resume } = useIntervalFn(() => {
    time.value--
    timeText.value = dayjs.unix(time.value).format('mm分ss秒')
    if (time.value <= 0) {
      pause()
    }
  }, 1000, false)
  onUnmounted(() => {
    pause()
  })

  const start = (countdown) => {
    time.value = countdown
    timeText.value = dayjs.unix(time.value).format('mm分ss秒')
    resume()
  }

  return { timeText, start }
}
